package com.bugyal.imentor.frontend.server;

import java.util.ArrayList;
import java.util.List;

import com.bugyal.imentor.frontend.shared.OpportunityVO;
import com.bugyal.imentor.frontend.shared.ParticipantVO;
import com.bugyal.imentor.frontend.shared.PulseVO;
import com.bugyal.imentor.server.data.Opportunity;
import com.bugyal.imentor.server.data.Participant;
import com.bugyal.imentor.server.data.ParticipantPulse;

public class ValueObjectGenerator {

	public static ParticipantVO create(Participant p) {
		if (p == null) {
			return null;
		}
		return new ParticipantVO(p.getKey().getId(), p.getName(),
				p.getGender(), p.getEmail(),p.getFacebookId(), p.getLoc().getLatitude(), p
						.getLoc().getLongitude(), p.getLoc()
						.getLocationString(), p.getLoc().getActiveRadius(),
				p.getHasSubjects(), p.getNeedSubjects());
	}

	public static List<PulseVO> createPulseVO(List<ParticipantPulse> pulseList) {
		List<PulseVO> pulseRecords = new ArrayList<PulseVO>();
		for(ParticipantPulse p : pulseList) {
			PulseVO pv=new PulseVO(p.getEmailId(), p.getName(), p.getFacebookId(), p.getLongitude(), p.getLatitude(), p.getLocationString(), p.getState(), p.getOthersFacebookId());
			pulseRecords.add(pv);
		}
		return pulseRecords;		
	}
	
	public static OpportunityVO create(Opportunity o) {
		// TODO(raman): Understand if participant info has to be supplied.
		// TODO(sudhakar): Add support for saying active vs. passive
		// opportunity.
		if (o == null) {
			return null;
		}
		
		return new OpportunityVO(o.getKey().getId(), o.getSubjects(),
				o.getRequiredMentors(), o.getPriority(), o.getLoc()
						.getLatitude(), o.getLoc().getLongitude(), o.getLoc()
						.getActiveRadius(), o.getLoc().getLocationString(),
				o.getMessage(),o.getLastModifiedTime());
	}

	public static List<ParticipantVO> createParticipantVOs(
			List<Participant> participantsList) {
		List<ParticipantVO> participantVOList = new ArrayList<ParticipantVO>();
		for (Participant p : participantsList) {
			participantVOList.add(ValueObjectGenerator.create(p));
		}
		return participantVOList;
	}

	public static List<OpportunityVO> createOpportunityVOs(
			List<Opportunity> opList) {

		List<OpportunityVO> opVos = new ArrayList<OpportunityVO>();
		if (opList != null) {
			for (Opportunity p : opList) {
				opVos.add(ValueObjectGenerator.create(p));
			}
		}
		return opVos;
	}	
}
